package com.kaifamiao.www.Thread.do0926;

public class SychronizedDemo implements Runnable{
    /**
     * synchronized可以有多种用法,这里做一个简单的整理:
     * 指定加锁对象:对给定对象加锁,进入同步代码前要获取给定对象的锁。
     * 直接作用于实例方法:相当于给当前实例加锁,进入同步代码块前要获得当前实例的锁。
     * 直接作用于静态方法:相当于对当前类加锁,进入同步代码前要获取当前类的锁。
     * synchronized加锁
     * 这里是几个线程跑的同一个SychronizedDome实例，所以直接给this加锁
     * 给实例方法加锁，先拿到锁的线程会连续执行100次aCount自增，然后释放锁给另一个线程
     *直接作用于静态方法的用法，和给实例方法加锁类似
     */
    private static int aCount = 0;

    public static int getCount(){
        return aCount;
    }
    @Override
    public void run() {
        for (int i = 1;i<=100;i++){
//            synchronized (this){
                aCount++;
            String name = Thread.currentThread().getName();
            System.out.println(name+"正在输出第"+i+"个数");

//            }
//            increase();
        }

    }
//    private static synchronized void increase(){
//        aCount++;
//    }


}
